/*
Date:20210430 21:49PM
key:为什么不能传递，因为传递会忽略掉负数。
learn:1.容器直接传入相同容器初始化，特别是dp[0]=nums[0]的时候好用的。
      2.dp[i]表示连乘到这一步的最大最小值，因此dp[size-1]只是考虑了全部连乘的情况。
      因此只要dp[i]到dp[size-1]有奇数个负数最大值就传递不过去。
      3.因此最大值是遍历得到的，
      4.学到了*max_element(max1.begin(),max1.end()).获取容器内最大值。
*/

class Solution {
public:
    int maxProduct(vector<int>& nums) 
    {
        vector<int>max1(nums),min1(nums);
        for(int i=1;i<nums.size();i++)
        {
            max1[i]=max(max1[i-1]*nums[i],max(nums[i],min1[i-1]*nums[i]));
            min1[i]=min(max1[i-1]*nums[i],min(nums[i],min1[i-1]*nums[i]));
        }

        
        return *max_element(max1.begin(),max1.end());
    }
};